package com.qtt.app.controller;

import com.qtt.app.common.ApiResponse;
import com.qtt.app.entity.AppStudyHistory;
import com.qtt.app.entity.ReturnInfo.StudyCourse.*;
import com.qtt.app.service.AppCourseService;
import com.qtt.app.service.AppStudyHistoryService;
import com.qtt.app.service.OrderFormService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;
import java.util.Map;

import static com.qtt.app.utils.JSONUtils.toJSONString;

@Api(tags = "我的学习模块", description = "StudyCourseController")   //tags是api名字，description是简介，value:已废用
@RestController
@RequestMapping("/StudyCourse")
public class StudyCourseController {
    @Autowired
    AppCourseService appCourseService;
    @Autowired
    OrderFormService orderFormService;//为了从订单表中获取已经报名的课程
    @Autowired
    AppStudyHistoryService appStudyHistoryService;

    @ApiOperation(value = "查找我报名学习的全部课程(不用了)", notes = "courseState为1表示还没开始、2表示正在进行、3表示已结束")  //value是Get /Msg/list旁边的那个api简介；notes是点开的介绍，可用于详细说明api作用
    @GetMapping("/getMyCourseAll")
    public ApiResponse<List<ReturnMyOnlineCourse>> getMyCourseAll(@ApiParam(value="用户id",required = true) @RequestParam(value="userId",required=true) Long userId){

        List<ReturnMyOnlineCourse> entities = appCourseService.getMyCourseAll(userId);
        if (entities.size() !=0) {//注意列表如果返回的是空，需要这么判断，空列表为[]
            return ApiResponse.<List<ReturnMyOnlineCourse>>builder().code(200).message("查看成功").data(entities).build();
        }else{
            return ApiResponse.<List<ReturnMyOnlineCourse>>builder().code(400).message("没有搜索到相关课程").data(null).build();
        }
    }


    @ApiOperation(value = "查找我的线上或线下课程", notes = "exact_course表的place字段为依据，如果课程地点是线下，则写具体的城市的名字，如果课程为线上，place字段是线上。courseState为1表示还没开始、2表示正在进行、3表示已结束")  //value是Get /Msg/list旁边的那个api简介；notes是点开的介绍，可用于详细说明api作用
    @GetMapping("/getOnlineCourses")
    public ApiResponse<List<ReturnMyOnlineCourse>> getOnlineCourses(@ApiParam(value="flag,输入1表示线上，输入2表示线下",required = true) @RequestParam(value="flag",required=true) int flag,
                                                                     @ApiParam(value="用户id",required = true) @RequestParam(value="userId",required=true) Long userId){

        List<ReturnMyOnlineCourse> entities = appCourseService.getMyOnlineCourses(flag,userId);
        if (entities.size() !=0) {//注意列表如果返回的是空，需要这么判断，空列表为[]
            return ApiResponse.<List<ReturnMyOnlineCourse>>builder().code(200).message("查看成功").data(entities).build();

        }
        else{
            return ApiResponse.<List<ReturnMyOnlineCourse>>builder().code(400).message("没有搜索到相关课程").data(null).build();
        }

    }


    @ApiOperation(value = "查看课程视频", notes = "")  //value是Get /Msg/list旁边的那个api简介；notes是点开的介绍，可用于详细说明api作用
    @GetMapping("/getCourseVideo")
    public ApiResponse<List<Video>> getStudyCourseVideos(@ApiParam(value="课程generalId",required = true) @RequestParam(value="generalId",required=true) String generalId
    ){

        List<Video> videoList = appCourseService.getStudyCourseVideos(generalId);

        if (videoList ==null) {//注意列表如果返回的是空，需要这么判断，空列表为[]
            return ApiResponse.<List<Video>>builder().code(400).message("没有搜索到相关课程").data(videoList).build();
        }
        return ApiResponse.<List<Video>>builder().code(200).message("查看成功").data(videoList).build();
    }


    @ApiOperation(value = "查看线上课程公告", notes = "")  //value是Get /Msg/list旁边的那个api简介；notes是点开的介绍，可用于详细说明api作用
    @GetMapping("/getCourseNotice")
    public ApiResponse<List<Notice>> getStudyCourseNotice(@ApiParam(value="课程generalId",required = true) @RequestParam(value="generalId",required=true) String generalId
    ){

        List<Notice> noticeList = appCourseService.getStudyCourseNotice(generalId);

        if (noticeList ==null) {//注意列表如果返回的是空，需要这么判断，空列表为[]
            return ApiResponse.<List<Notice>>builder().code(400).message("没有搜索到相关课程").data(noticeList).build();
        }
        return ApiResponse.<List<Notice>>builder().code(200).message("查看成功").data(noticeList).build();
    }

    @ApiOperation(value = "查看课程资料", notes = "")  //value是Get /Msg/list旁边的那个api简介；notes是点开的介绍，可用于详细说明api作用
    @GetMapping("/getCourseResource")
    public ApiResponse<List<Resource>> getStudyCourseResource(@ApiParam(value="课程generalId",required = true) @RequestParam(value="generalId",required=true) String generalId
    ){

        List<Resource> resourceList = appCourseService.getStudyCourseResource(generalId);

        if (resourceList ==null) {//注意列表如果返回的是空，需要这么判断，空列表为[]
            return ApiResponse.<List<Resource>>builder().code(400).message("没有搜索到相关课程").data(resourceList).build();
        }
        return ApiResponse.<List<Resource>>builder().code(200).message("查看成功").data(resourceList).build();
    }


    @ApiOperation(value = "查看线下课程公告", notes = "")  //value是Get /Msg/list旁边的那个api简介；notes是点开的介绍，可用于详细说明api作用
    @GetMapping("/getOfflineCourseNotice")
    public ApiResponse<NoticeOffline> getOfflineCourseNotice(@ApiParam(value="课程generalId",required = true) @RequestParam(value="generalId",required=true) String generalId
    ){

        NoticeOffline noticeList = appCourseService.getOfflineCourseNotice(generalId);

        if (noticeList ==null) {//注意列表如果返回的是空，需要这么判断，空列表为[]
            return ApiResponse.<NoticeOffline>builder().code(400).message("没有搜索到相关课程").data(noticeList).build();
        }
        return ApiResponse.<NoticeOffline>builder().code(200).message("查看成功").data(noticeList).build();
    }

    @ApiOperation(value = "点击观看视频，记录学习数据(线上课)", notes = "返回的是Map.只有线上课程视频需要调用该接口。会修改学习进度并保存到观看历史记录里")  //value是Get /Msg/list旁边的那个api简介；notes是点开的介绍，可用于详细说明api作用
    @PostMapping("/watchVideo")
    public ApiResponse<Map<String,Object>> addWatchVideoRecord(@ApiParam(value="请求参数解析：用户id、课程generalId、订单id以及课程和视频的相关信息。注意：studyHistoryId、gmtCreate、gmtModified这几个参数不用传 删掉。",required = true) @RequestBody(required=true) AppStudyHistory requestData
    ){
        Map<String,Object> studyRecordMap = appStudyHistoryService.addWatchOnlineCourseVideoRecord(requestData);

        if (studyRecordMap.get("studyHistoryId") ==null) {//注意列表如果 返回的是空，需要这么判断，空列表为[]
            return ApiResponse.<Map<String,Object>>builder().code(400).message("添加观看记录失败").data(studyRecordMap).build();
        }
        return ApiResponse.<Map<String,Object>>builder().code(200).message("添加观看记录成功").data(studyRecordMap).build();
    }


    @ApiOperation(value = "查看我的继续学习课程", notes = "courseState为1表示还没开始、2表示正在进行、3表示已结束")  //value是Get /Msg/list旁边的那个api简介；notes是点开的介绍，可用于详细说明api作用
    @GetMapping("/getLastStudyCourse")
    public ApiResponse<AppStudyHistory> getLastStudyCourse(@ApiParam(value="用户id",required = true) @RequestParam(value="userId",required=true) Long userId){

        AppStudyHistory entity = appStudyHistoryService.getLastStudyCourse(userId);
        if (entity!=null) {//注意列表如果返回的是空，需要这么判断，空列表为[]
            return ApiResponse.<AppStudyHistory>builder().code(200).message("查看成功").data(entity).build();

        }
        else{
            return ApiResponse.<AppStudyHistory>builder().code(400).message("没有相关学习课程").data(null).build();
        }
    }

    //    @ApiOperation(value = "查看学习课程的详情", notes = "")  //value是Get /Msg/list旁边的那个api简介；notes是点开的介绍，可用于详细说明api作用
//    @GetMapping("/getStudyCourseDetails")
//    public ApiResponse<ReturnStudyCourseDetails> getStudyCourseDetails(@ApiParam(value="课程generalId",required = true) @RequestParam(value="generalId",required=true) String generalId
//                                                                       ){
//
//        List<Object> list = new ArrayList<Object>();
//
//
//        ReturnStudyCourseDetails returnStudyCourseDetailsEntity = appCourseService.getStudyCourseDetails(generalId);
//
//        if (returnStudyCourseDetailsEntity ==null) {//注意列表如果返回的是空，需要这么判断，空列表为[]
//            return ApiResponse.<ReturnStudyCourseDetails>builder().code(400).message("没有搜索到相关课程").data(returnStudyCourseDetailsEntity).build();
//        }
//        return ApiResponse.<ReturnStudyCourseDetails>builder().code(200).message("查看成功").data(returnStudyCourseDetailsEntity).build();
//    }




}
